/*
 * commons is a based project implemented
 * Copyright (C) 2024 Jasmine
 */
package com.commons.core.anno;

import java.lang.annotation.*;

import com.commons.core.enums.ExpressionEnum;

/**
 * 逻辑： 都有value的情况下 <br/>
 * 1.没有@Query注解，默认走实体类的字段 EQ 查询； <br/>
 * 2.有@Query注解，columns为空 走实体类的字段，并且根据queryType来查询； <br/>
 * 3.有@Query注解，columns不为空且columns长度为1，走columns[0]的字段，并且根据queryType来查询； <br/>
 * 4.有@Query注解，columns不为空且columns长度大于1，走columns的所有字段， 并且根据queryType来查询； columns之间的处理是OR操作 <br/>
 *
 * @author Jasmine
 * @version 1.0
 * @description
 * @see Query
 * @since 2024-01-22 14:59:59
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Query {

    /**
     * 字段名，为空自动处理小驼峰转下划线
     * 
     * @Query(columns = {"username", "phone"}) <br/>
     *                private String username;
     */
    String[] columns() default {};

    /**
     * 匹配方式，默认为精确查询查询 {@link ExpressionEnum}
     */
    ExpressionEnum expression() default ExpressionEnum.EQ;
}
